package com.g8.pethospitallearnbackend.config;

import com.g8.pethospitallearnbackend.exception.GlobalExceptionHandler;
import com.g8.pethospitallearnbackend.exception.NoDataException;
import com.g8.pethospitallearnbackend.interceptors.JWTinterceptor;
import com.g8.pethospitallearnbackend.utils.NewIdGenerateUtil;
import com.g8.pethospitallearnbackend.utils.ValidateUtil;
import com.g8.pethospitallearnbackend.utils.responseUtil.ConcreteResponseBodyAdvice;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * ImportSelector接口实现类
 * 把要在Spring中注册（放进IOC中）的类（即配置类）都放进来
 * 然后直接在Application启动类中import这一个类即可
 */
public class CommonImportsSelect implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        // 有问题
//        //存放每一个配置类的全类名 的集合
//        List<String> imports = new ArrayList<>();
//        /*
//        通过类加载器去获取一个名为test.imports的资源作为输入流
//        注意：1、要访问的资源文件的路径
//        2、getResourceAsStream()返回的输入流需要进行适当的关闭处理
//         */
//        // 通过类加载器获取资源，就是尝试找这个文件并将其转为输入流
//        InputStream is = CommonImportsSelect.class.getClassLoader().getResourceAsStream("imports.configs");
//        BufferedReader br = new BufferedReader(new InputStreamReader((is)));
//        String line = null;
//        while(true) {
//            try {
//                if((line = br.readLine()) == null) break;
//
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            } finally {
//                if (br != null) {
//                    try {
//                        br.close();
//                    } catch (IOException e) {
//                        throw new RuntimeException(e);
//                    }
//                }
//            }
//            imports.add(line);
//        }
//        // 这里是将集合对象转为数组对象，但是需要传入一个数组对象作为参数来指定返回数组的类型和大小，
//        // 传递一个空的数组作为参数，是要根据运行时集合的大小自动创建一个合适大小的数组
//        return imports.toArray(new String[0]);

        return new String[]{
                ConcreteResponseBodyAdvice.class.getName(),
                GlobalExceptionHandler.class.getName(),
                NoDataException.class.getName(),
                ValidateUtil.class.getName(),
                NewIdGenerateUtil.class.getName()
        };
    }
}
